////////////////////////////////////////////////////////////////////////////////

#ifndef _CLIENT_H_
#define _CLIENT_H_

////////////////////////////////////////////////////////////////////////////////

#ifndef _CLIENTENGINE_H_
#include "clientengine.h"
#endif

#ifndef _CLIENTNETWORK_H_
#include "clientnetwork.h"
#endif

#ifndef _CLIENTGUI_H_
#include "clientgui.h"
#endif

////////////////////////////////////////////////////////////////////////////////

class ServerPacketOnClient;
class ClientPacketOnClient;

////////////////////////////////////////////////////////////////////////////////


/** This class represents game client
*   It manipulates GUI, engine, network and synchronizes them
*
*  @author   Roman Pasechnik
*  @author   Anastasia Karpinska
*  @since    Jun 23th, 2009
*  @updated  Nov 12th, 2009
*/
class Client
{
////////////////////////////////////////////////////////////////////////////////

public:

////////////////////////////////////////////////////////////////////////////////


    /** Constructor */
    Client();


    /** Destructor */
    ~Client();


////////////////////////////////////////////////////////////////////////////////


    /** Start game */
    void Start();


////////////////////////////////////////////////////////////////////////////////


    /** Receive packet from server */
    void Receive( const ServerPacketOnClient* _packet );


    /** Send packet to server */
    void Send( const ClientPacketOnClient* _packet );


////////////////////////////////////////////////////////////////////////////////

private:    

////////////////////////////////////////////////////////////////////////////////


    /** Client engine */
    ClientEngine m_Engine;


    /** Client network */
    ClientNetwork m_Network;


////////////////////////////////////////////////////////////////////////////////


public:


    /** Client GUI */
    ClientGUI m_GUI;


////////////////////////////////////////////////////////////////////////////////
};


////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////

